package job.job_0823;
import java.util.Arrays;
public class Majority {
    public static void main(String[] args) {
        int arr[]={3,2,3};
        int arr1[]={2,2,1,1,1,2,2};
        System.out.println(majority(arr));
        System.out.println(majority(arr1));

    }

    /**
     * 给定一个大小为 n 的数组，找到其中的多数元素。多数元素是指在数组中出现次数 大于 ⌊ n/2 ⌋ 的元素。
     * 你可以假设数组是非空的，并且给定的数组总是存在多数元素。
     * @param arr
     * @return
     */
    public static int majority(int []arr){
        Arrays.sort(arr);
//        for(int i=0;i<arr.length;i++){
//            for(int j=0;j<arr.length-1-i;j++){
//                if(arr[j]>arr[j+1]){
//                    int tmp=arr[j];
//                    arr[j]=arr[j+1];
//                    arr[j+1]=tmp;
//                }
//            }
//        }
        return arr[arr.length>>1];
    }
    //摩尔投票法：O(N)专门解决众数问题
    //教师解法
    public static int majorityVote(int []arr){
        int count=0;
        int candidate=-1;
        for(int i:arr){
            if(count==0){
                //更换候选人
                candidate=i;
            }
            if(i!=candidate){
                count--;
            }
            else{
                count++;
            }
        }
        return candidate;
    }

}

